package Negocio;

import ClassesBasicas.Componente;
import java.util.ArrayList;
import ClassesBasicas.Selecao;
import Repositorio.RepSelecao;
import erro.ConexaoException;
import erro.NegocioException;
import erro.RepositorioException;

/**
 * Classe que define uma regra de negocio 
 * para uma selecao e suas validacoes. 
 * 
 * @author Esdras
 *
 */

public class NegocioSelecao {

private RepSelecao rep;
	
	public NegocioSelecao(){
		rep = new RepSelecao();
	}
	/**
	 * Testa se a atividade já existe, caso sim retorna a true
	 * caso conrio false 
	 * @param at
	 * @throws NegocioException
	 */
	public boolean existeSelecao(Selecao sel ) throws NegocioException {
		Selecao tmp = new Selecao();
		
			tmp = consultar(sel.getNomeSelecao());
			
			if(tmp != null)
				return true;
			else
				return false;
	}
	/**
	 * Validacao dos campos da atividade antes de salvar	
	 * @param at
	 * @throws NegocioException
	 */
	public void salvar(Selecao sel) throws NegocioException{
		
		if(sel == null || sel.getNomeSelecao().equals("")){
			throw new NegocioException("Nome invalido ou selecao nula");
		}
		
		if(!ValidacoesGerais.isNomeValid(sel.getNomeSelecao())){
			 throw new NegocioException("Este campo nao pode conter caracteres numericos nem especiais");
		 }
		
                 if(sel.getPais().getCodPais() <=0 ){
                         throw new NegocioException("codigo do pais invalido");
                 }
		if(sel.getCopa()!= null){
                    if(sel.getCopa().getCodCopa() <= 0){
                            throw new NegocioException("codigo da copa invalido");
                    }
                }
		
		
		try {
			rep.salvar(sel);
		} catch (ConexaoException e) {
			
			throw new NegocioException("Verifique a conexao com o Banco de Dados "+e.getMessage());
		} 
		catch (RepositorioException e) {
			
			throw new NegocioException("Erro ao Salvar uma Selecao "+e.getMessage());
		}
		
	}
	/**
	 * Valida e exclui pelo codigo 
	 * 
	 * @param cod
	 * @throws NegocioException
	 */
	public void excluir(int cod) throws NegocioException{

            
		if(cod <= 0){
			throw new NegocioException("Codigo Invalido");
		}
		
		try {
						
			rep.excluir(cod);
			
		} catch (ConexaoException e) {
			
			throw new NegocioException("Verifique a conex�o com o Banco de Dados "+e.getMessage());
			
		} catch (RepositorioException e) {
			
			throw new NegocioException("Erro ao Excluir uma selecao "+e.getMessage());
		}
	}
/**
 * Valida e exclui uma selecao polo nome
 * @param nome
 * @throws NegocioException
 */
public void excluir(String nome) throws NegocioException{
	NegocioComponente rncomp = new NegocioComponente();
	ArrayList<Componente> listacomp = new ArrayList<Componente>();	
		if(!ValidacoesGerais.isNomeValid(nome)){
			throw new NegocioException("Este campo nao pode conter caracteres numericos nem especiais");
		}
		
		if(nome == null || nome.equals("")){
			throw new NegocioException("Nome invalido");
		}
		
		try {
                    
                        listacomp = (ArrayList<Componente>) rncomp.listarPorSel(nome);
			
                        if(!listacomp.isEmpty()){
                            throw new NegocioException("Exclua todos os componentes da Selecao para excluir a Selecao");
                        }
                        
                        rep.excluir(nome);
		} catch (ConexaoException e) {
			
			throw new NegocioException("Verifique a conxao com o Banco de Dados "+e.getMessage());
			
		} catch (RepositorioException e) {
			
			throw new NegocioException("Erro ao excluir uma Selecao "+e.getMessage());
		}
	}
	/**
	 * valida e consulta uma ativiade pelo codigo
	 * @param cod
	 * @return
	 * @throws NegocioException
	 */
	public Selecao consultar(int cod) throws NegocioException{
		 Selecao sel = null;
		 
		 if(cod <= 0){
			 throw new NegocioException("Codigo Invalido");
		 }
		 
		 try {
			sel = rep.consultar(cod);
			
			
		} catch (ConexaoException e) {
			
			throw new NegocioException("Verifique a conexao com o Banco de Dados "+e.getMessage());
			
		} catch (RepositorioException e) {
			
			throw new NegocioException("Erro ao consultar uma selecao "+e.getMessage());
		}
		
		 return sel;
		
	}
	/**
	 * validada e consulta uma atividade pelo nome
	 * @param nome
	 * @return
	 * @throws NegocioException
	 */
	public Selecao consultar(String  nome) throws NegocioException{
		 Selecao sel = null;
		 
		 if(!ValidacoesGerais.isNomeValid(nome)){
			 throw new NegocioException("Este campo nao pode conter caracteres numericos nem especiais");
		 }
		 
		 if(nome == null ||nome.equals("")){
			 throw new NegocioException("nome Invalido");
		 }
		 
		 try {
			sel = rep.consultar(nome);
			
			
		} catch (ConexaoException e) {
			
			throw new NegocioException("Verifique a conexao com o Banco de Dados "+e.getMessage());
			
		} catch (RepositorioException e) {
			
			throw new NegocioException("Erro ao consultar uma selecao "+e.getMessage());
		}
		 
			
		 return sel;
		
	}
	/**
	 * Lista todas as Selecoes nao haja retorna uma lista vasia
	 * 
	 * @return ArrayList<Selecao>
	 * @throws NegocioException
	 */
	public ArrayList<Selecao> listarSelecao() throws NegocioException{
		
		ArrayList<Selecao> list = new ArrayList<Selecao>();
		
		try {
			list = (ArrayList<Selecao>) rep.listar();
		} catch (ConexaoException e) {
			throw new NegocioException("Verifique a conexao com o Banco de Dados "+e.getMessage());
		} catch (RepositorioException e) {
			throw new NegocioException("Erro listar Selecoes " +e.getMessage());
		}
		
		return list;
	}
}
